我正在尝试将数据从SQL Server导出为CSV格式.我有一个蝙蝠任务来执行此操作,定期运行.命令是:
SQLCMD.EXE -d [db details] -i c:\export.sql -o c:\export.csv -s"," -W
Run Code Online (Sandbox Code Playgroud)
SQL文件只是视图中的SELECT*.
除了某些行在数据中包含逗号之外,这是有效的,因此需要引用这些值.我可以将列分隔符更改为"','",但是我还需要SQL Server来转义数据中的单引号.
不幸的是,将分隔符更改为另一个字符不太可能在100%的情况下解决问题,因为其中一个字段包含来自另一个包含各种怪异和奇妙字符的应用程序的序列化数据.
有没有办法让我获得标准的引用CSV数据?
我想运行一个.sql批处理脚本来从cmd窗口中删除许多表中的记录.所以,为此我尝试使用以下命令连接到我的本地SQLEXPRESS实例 -
sqlcmd -e -s\SQLEXPRESS
但是,我无法连接并收到以下错误:
'Named Pipes Provider: Could not open a connection to SQL Server [2]'.
Run Code Online (Sandbox Code Playgroud)
我从错误消息中注意到的另一个奇怪的事情是上面的命令试图连接到SQL Server 2005,而在我的机器上运行的实例是SQLEXPRESS 2008.
任何人都可以指导.
PS我正在使用Windows身份验证连接到SQLEXPRESS,这是我使用Mgmt Studio进行连接时的情况.
我正在使用Microsoft Data-Tier Application框架来创建基于DacPackage对象的部署脚本.我试图使用Microsoft.SqlServer.Management.Smo.Server类来执行此脚本...
SqlConnection deployConnection = new SqlConnection(connBuilder.ToString());
deployConnection.Open();
Server server = new Server(new ServerConnection(deployConnection));
server.ConnectionContext.ExecuteNonQuery(deployScript);
Run Code Online (Sandbox Code Playgroud)
然而,这错误...
Unhandled Exception: Microsoft.SqlServer.Management.Common.ExecutionFailureException:
An exception occurred while executing a Transact-SQL statement or batch. --->
System.Data.SqlClient.SqlException: Incorrect syntax near ':'.
Run Code Online (Sandbox Code Playgroud)
我知道这个问题的答案是我需要处于SQLCMD模式,但我不知道如何告诉我的ServerConnection在所述模式下执行.
我想我的问题不像我在标题中说的那样具体.我真正需要做的是通过.Net框架执行从DacPackage生成的脚本.谁能帮我这个?
c# sql-server sqlcmd data-tier-applications sql-server-data-tools
我有这个MSSQL SQLCMD代码,它可以登录数据库,在这只需要一个SELECT语句:
:CONNECT czasql-001
SELECT * FROM [Lps_Hepper_Cz].[config].[LpsPlant]
GO
:CONNECT LS_Hepper_DK
SELECT * FROM [LPS_Hepper_NY].[config].[LpsPlant]
:CONNECT LS_Hepper_DK
SELECT * FROM [LPS_Hepper_DK].[config].[LpsPlant]
:CONNECT LS_Hepper_DK
SELECT * FROM [LPS_Hepper_SUPPLIER].[config].[LpsPlant]
GO
:CONNECT LS_Hepper_372
SELECT * FROM [LPS_Hepper_MO].[config].[LpsPlant]
GO
:CONNECT LS_Hepper_678
SELECT * FROM [LPS_Hepper_678].[config].[LpsPlant]
GO
Run Code Online (Sandbox Code Playgroud)
此解决方案可以正常工作,但要求我多次复制粘贴副本以更改数据库名称.但是有人可以通过使用循环来帮助我改进这一点.我试过使用临时表.像这样:
declare @tbl table (ServerName nvarchar(50), DbName nvarchar(50), IsDone bit default(0))
insert into @tbl (ServerName,DbName) VALUES ('CZASQL-001', '[Lps_Hepper_CZ]')
insert into @tbl (ServerName,DbName) VALUES ('LS_Hepper_DK', '[Lps_Hepper_DK]')
insert into @tbl (ServerName,DbName) VALUES ('LS_Hepper_DK', '[Lps_Hepper_NY]')
insert into @tbl (ServerName,DbName) VALUES ('LS_Hepper_DK', …Run Code Online (Sandbox Code Playgroud) SQLCMD支持-s参数来指定列分隔符,但我无法确定如何表示选项卡(CHAR(9))字符.我尝试了以下但两个都不起作用:
sqlcmd -S ServerName -E -Q"select * from mytable" -s"\t" -o results.txt
sqlcmd -S ServerName -E -Q"select * from mytable" -s'\t' -o results.txt
Run Code Online (Sandbox Code Playgroud)
有什么想法在SQLCMD中如何做到这一点?
我有一个简单的SQLCMD脚本,包括这样的一些行:
/* Load data into Exampletable */
BULK INSERT dbo.Example
/* NOTE: I've tried single AND double quotes here. */
FROM "C:\Example Filepath\test.csv"
WITH
(
/* skip the first row containing column names */
FIRSTROW = 2,
/* specify how fields are separated */
FIELDTERMINATOR = '|',
/* specify how lines end */
ROWTERMINATOR = '\n'
)
Run Code Online (Sandbox Code Playgroud)
当我在命令行上运行它时,我收到如下错误:
Sqlcmd: 'C:\Example': Invalid filename.
我认为在路径中有一个空格会导致路径被切断,但我无法找出有效的语法.有没有人有这方面的经验?
当某些.sql文件包含语法错误时,如何从SQLCMD实用程序获取%ERRORLEVEL%?这些文件创建存储过程.他们不会调用"raiseerror",但是他们可以控制语法错误,我需要终止进程.但它总是将%ERRORLEVEL%返回为0.我尝试使用-b,-V和-m(以及它们的组合),但没有按预期对我有效.
这是我的BAT文件的代码片段.
REM process all sql files in "SQL\scripts" folder and subfolders
FOR /R "SQL\scripts" %%G IN (*.sql) DO (
sqlcmd -d %1 -S %2 -U %3 -P %4 -i "%%G" -b -V 1
echo %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
)
Run Code Online (Sandbox Code Playgroud) 我正在创建一个类库,它将.SQL文件作为输入(FileInfo)和一个连接字符串.然后它尝试对连接执行sql文件.
我决定支持Microsoft的SMO和SQLCMD.exe
在测试中,我注意到在我的环境中的许多机器上,默认情况下没有安装SQLCMD.尝试运行进程SQLCMD.exe时出现程序错误.
在不搜索整个硬盘的情况下寻找它的正确方法是什么?是否有一个通用的注册表位置,指定它是否已安装?通常在安装时,我认为设置了PATH位置.
非常感谢.
我正在使用Korn shell在Linux机箱(Red Hat Enterprise Server 5.3 tikanga)上运行适用于Linux的Microsoft SQLCMD工具(CTP 11.0.1720.0).该工具已正确配置,除了使用脚本变量外,在所有情况下均可使用.
我有一个SQL脚本,看起来像这样.
SELECT COLUMN1 FROM TABLE WHERE COLUMN2 = '$(param1)';
Run Code Online (Sandbox Code Playgroud)
而且我正在运行这样的sqlcmd命令.
sqlcmd -S server -d database -U user -P pass -i input.sql -v param1="DUMMYVALUE"
Run Code Online (Sandbox Code Playgroud)
当我执行上面的命令时,我收到以下错误.
Sqlcmd: 'param1=DUMMYVALUE': Invalid argument. Enter '-?' for help.
帮助列出以下语法.
[-v var = "value"...]
我在这里错过了什么吗?
如何运行命令,传递给sqlcmd当前登录用户,即无需输入用户名和密码?
我只想使用Windows身份验证.它是本地服务器.
谢谢,
sqlcmd ×10
sql-server ×6
sql ×3
c# ×2
csv ×2
.net ×1
batch-file ×1
bulkinsert ×1
linux ×1
login ×1
syntax-error ×1
username ×1