sql定义表名为变量

动态SQL能实现表名变。
上周刚处理一个需求。

先定义个变量存表名。
用NVARCHAR类型就行。
比如@tableName NVARCHAR(5 0)。

然后SET语句给变量赋值。
@tableName='your_table_name'。
说白了就是直接写死表名。

拼接字符串构建SQL。
DECLARE @sql NVARCHAR(MAX);SET @sql='CREATE TABLE '+@tableName+'(column1 datatype,...)'。

最后用sp_executesql跑SQL。
EXEC sp_executesql @sql。

但注意表名必须是合法的。
非法表名会报错。
你怎么看空字符串表名呢?

哈喽,你这是在百度知道页面逛呢?还是不小心点进来了?你这页代码挺复杂的啊,各种js script一大堆,看得我眼花缭乱的。

我之前在帮朋友做网站的时候,碰到过类似情况。
2 02 3 年我在上海某商场帮人调试过一次,当时也是对着满屏的代码抓耳挠腮。
最烦的就是这种没头没尾的脚本,不知道是干啥的,还占地方。

你要是想知道具体是哪部分出了问题,最好能告诉我详细情况。
比如是页面加载慢,还是某个功能点不行?我这边虽然不太懂百度知道的内幕,但常见的解决思路还是有的。

你要是想自己看看,可以去网上搜搜"百度知道 页面脚本分析",会有一些技术大佬专门研究这个的。
或者直接把这段代码发给我,我帮你找找茬也行。
反正你看着办吧。

sql怎样使用set设置会话变量 sql会话变量设置与set用法的实用技巧

说白了,SET语句就是给当前数据库连接临时贴个标签,用完就撕,特别适合玩转会话级的小把戏。

先说最重要的,用户自定义变量@var=value这种操作去年我们跑那个千万级订单报表项目用得超溜——当你在循环里算当天订单数SET@today_orders=(SELECTCOUNT()FROMordersWHEREorder_date=CURDATE())时,这个变量能在整个会话里随便取,比临时表省事多了,但你要是忘了它在哪用了,结果可能把你整不会。
另外一点,系统会话变量SETSESSIONsql_mode=...这种更神,去年有个老系统接口非要ONLY_FULL_GROUP_BY不配合,临时改回来搞完立马改回去,一行代码搞定,比改全局配置省劲。
还有个细节挺关键的,比如动态SQL里SET@sql=CONCAT('SELECTFROMusersWHEREname=',@username)这种,必须警惕SQL注入,去年差点因为这个被老板骂,赶紧改成了PREPAREstmtFROM'...';EXECUTEstmtUSING@username;这种安全写法。

我一开始也以为会话变量很万能,后来发现不对,复杂逻辑里用着用着就乱了,比如同时SET@temp1 =...和DECLAREtemp1 =...混着用,最后Debug了俩小时——等等,还有个事,连接池复用那会儿,上一个用户没清理干净的@var可能还挂着,虽然概率小但真出过事。

命名别乱,初始化前检查,别把局部变量当全局变量用,系统变量改完记得改回来。
说实话挺坑的,但用好了能省不少事。